package GPSChallenge.vehiculo;

import Excepciones.NoConozcoAlObstaculoException;
import Excepciones.NoConozcoAlVehiculoException;
import Excepciones.NoConozcoLaBanderaException;
import Excepciones.NoConozcoLaSorpresaException;
import GPSChallenge.bandera.Bandera;
import GPSChallenge.obstaculo.ControlPolicial;
import GPSChallenge.obstaculo.Obstaculo;
import GPSChallenge.obstaculo.ObstaculoVacio;
import GPSChallenge.obstaculo.Piquete;
import GPSChallenge.obstaculo.Pozo;
import GPSChallenge.sorpresa.Sorpresa;

public class Auto implements Estado{

	static private Auto unicaInstancia = null;
	
	static public Auto obtenerEstado(){
		
	    if (unicaInstancia == null)
	        unicaInstancia = new Auto();
	    
	    return unicaInstancia;
	}
	
	public Estado obtenerNuevoEstado()
	{
		return Camioneta4x4.obtenerEstado();
	}

	@Override
	public void interceptarA(Pozo pozo, Vehiculo vehiculo) throws NoConozcoAlObstaculoException, NoConozcoAlVehiculoException {
		
		pozo.interceptarA(this, vehiculo);
	}

	@Override
	public void interceptarA(Piquete unPiquete, Vehiculo vehiculo) throws NoConozcoAlObstaculoException, NoConozcoAlVehiculoException {
		unPiquete.interceptarA(this,vehiculo);
		
	}

	@Override
	public void interceptarA(ControlPolicial control, Vehiculo vehiculo) throws NoConozcoAlObstaculoException, NoConozcoAlVehiculoException {
		
		control.interceptarA(this,vehiculo);
	}
	
	@Override
	public void interceptarA(Bandera bandera, Vehiculo vehiculo) throws NoConozcoLaBanderaException, NoConozcoAlVehiculoException {
		
		bandera.interceptarA(vehiculo);
	}

	
	public void interceptarA(Sorpresa sorpresa, Vehiculo vehiculo) throws NoConozcoLaSorpresaException, NoConozcoAlVehiculoException {
		
		sorpresa.interceptarA(vehiculo);
	}

	@Override
	public void interceptarA(ObstaculoVacio obsVacio, Vehiculo vehiculo) throws NoConozcoAlVehiculoException {
		
		obsVacio.interceptarA(this, vehiculo);
		
	}
	
	public void interceptarA(Obstaculo unObstaculo, Vehiculo vehiculo) throws NoConozcoAlVehiculoException{
		
		unObstaculo.interceptarA(this, vehiculo);
		
	}
	
	public String toString(){
		
		return "Auto";
		
	}
	
}
